package org.using_jdbc;

import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Shell {
    public static void main(String[] args) throws SQLException{
        //初始化连接
        InitSQL initSQL = new InitSQL();
        Connection connection = initSQL.init_mysql();
        if(connection==null){
            System.out.println("数据库连接失败！");
            System.exit(-1);
        }

        //路径示例
        //File file_student = new File("src/main/resources/student.csv");

        //初始化变量
        String file_path,option;
        List<String> primary_keys = new ArrayList<>();

        //用法
        System.out.println("Hello ~ ");
        System.out.println("|--------------------------HELP_START----------------------------------|");
        System.out.println("用法: import file_path [ -a | -b | -c ] [ primary keys ]");
        System.out.println("若不指定参数，默认使用 [-a] 选项。导入的表名为去掉后缀的文件名。");
        System.out.println("[-a] 自动产生一个索引作为主键，[primary keys]无效，不去除表中重复数据，提示空值。");
        System.out.println("[-b] 自动产生一个索引作为主键，[primary keys]无效，提示并去除表中重复数据，提示空值。");
        System.out.println("[-c] 若不指定[primary keys]，默认选用所有列名作为主键。若主键有空值则操作失败。");
        System.out.println("[-c] 若指定[primary keys]，利用指定的所有项作为主键。若主键有空值则操作失败。");
        System.out.println("输入 quit 以退出。");
        System.out.println("|----------------------------HELP_END-----------------------------------|");
        System.out.print(">>>");

        //读取命令行并执行
        Scanner scanner = new Scanner(System.in);
        do {
            //命令及参数
            String cmd;
            List<String> cmd_args = new ArrayList<>();

            //获取命名和参数并执行对应的操作
            Scanner cmd_scanner = new Scanner(scanner.nextLine());
            if (cmd_scanner.hasNext()) {
                cmd = cmd_scanner.next();
                while (cmd_scanner.hasNext()) {
                    cmd_args.add(cmd_scanner.next());
                }

                //程序结束标志
                if (cmd.equals("quit")) {
                    try{
                        connection.close();
                    }catch(SQLException se){
                        se.printStackTrace();
                    }
                    System.out.println("Bye ~ ");
                    System.exit(0);
                } else if (cmd.equals("import")) {
                    switch (cmd_args.size()){
                        case 0:{
                            System.out.println("用法错误");
                        }
                        case 1:{
                            file_path = cmd_args.get(0);
                            File file= new File(file_path);
                            //检测文件是否存在
                            if(file.exists()){
                                CreatTable creatTable = new CreatTable(connection,file);
                                if(creatTable.create_table_auto_index_with_repeat())
                                    System.out.println("导入成功");
                                else
                                    System.out.println("导入失败");
                            } else {
                                System.out.println("文件不存在");
                            }
                            break;
                        }
                        case 2:{
                            file_path = cmd_args.get(0);
                            option = cmd_args.get(1);
                            File file= new File(file_path);
                            if(file.exists()){
                                CreatTable creatTable = new CreatTable(connection,file);
                                switch (option) {
                                    case "-a" -> {
                                        if (creatTable.create_table_auto_index_with_repeat())
                                            System.out.println("导入成功");
                                        else
                                            System.out.println("导入失败");
                                    }
                                    case "-b" -> {
                                        if (creatTable.create_table_auto_index_without_repeat())
                                            System.out.println("导入成功");
                                        else
                                            System.out.println("导入失败");
                                    }
                                    case "-c" -> {
                                        if (creatTable.create_table_with_primary_keys(null))
                                            System.out.println("导入成功");
                                        else
                                            System.out.println("导入失败");
                                    }
                                    default -> System.out.println("用法错误");

                                }

                            } else {
                                System.out.println("文件不存在");
                            }
                            break;
                        }
                        default:{
                            file_path = cmd_args.get(0);
                            option = cmd_args.get(1);
                            for (int i=2;i<cmd_args.size();i++){
                                primary_keys.add(cmd_args.get(i));
                            }

                            File file= new File(file_path);
                            if(file.exists()){
                                CreatTable creatTable = new CreatTable(connection,file);
                                if(option.equals("-c")){
                                    if(creatTable.create_table_with_primary_keys(primary_keys))
                                        System.out.println("导入成功");
                                    else
                                        System.out.println("导入失败");
                                }else {
                                    System.out.println("用法错误");
                                }

                            } else {
                                System.out.println("文件不存在");
                            }
                            break;
                        }
                    }
                }
                else {
                    System.out.println("用法错误");
                }
            } else {
                System.out.println("输入为空!");
            }
            System.out.print(">>>");
        }
        while (scanner.hasNextLine());
    }
}
